// export you ; export MacMillan , Burlak ; function prepare_units ; begin
   0: LD_INT 0
   2: PPUSH
// MacMillan := CreateCharacter ( JMM ) ;
   3: LD_ADDR_EXP 2
   7: PUSH
   8: LD_STRING JMM
  10: PPUSH
  11: CALL_OW 34
  15: ST_TO_ADDR
// Burlak := CreateCharacter ( Burlak ) ;
  16: LD_ADDR_EXP 3
  20: PUSH
  21: LD_STRING Burlak
  23: PPUSH
  24: CALL_OW 34
  28: ST_TO_ADDR
// SetClass ( MacMillan , class_engineer ) ;
  29: LD_EXP 2
  33: PPUSH
  34: LD_INT 2
  36: PPUSH
  37: CALL_OW 336
// SetClass ( Burlak , class_mechanic ) ;
  41: LD_EXP 3
  45: PPUSH
  46: LD_INT 3
  48: PPUSH
  49: CALL_OW 336
// SetSide ( [ MacMillan , Burlak ] , you ) ;
  53: LD_EXP 2
  57: PUSH
  58: LD_EXP 3
  62: PUSH
  63: EMPTY
  64: LIST
  65: LIST
  66: PPUSH
  67: LD_EXP 1
  71: PPUSH
  72: CALL_OW 235
// PlaceUnitArea ( MacMillan , central , false ) ;
  76: LD_EXP 2
  80: PPUSH
  81: LD_INT 1
  83: PPUSH
  84: LD_INT 0
  86: PPUSH
  87: CALL_OW 49
// PlaceUnitArea ( Burlak , central , false ) ;
  91: LD_EXP 3
  95: PPUSH
  96: LD_INT 1
  98: PPUSH
  99: LD_INT 0
 101: PPUSH
 102: CALL_OW 49
// end ;
 106: LD_VAR 0 1
 110: RET
// function prepare_freedom ; var building , un , x , y , dir , weap , Freedom ; begin
 111: LD_INT 0
 113: PPUSH
 114: PPUSH
 115: PPUSH
 116: PPUSH
 117: PPUSH
 118: PPUSH
 119: PPUSH
 120: PPUSH
// uc_side := 7 ;
 121: LD_ADDR_OWVAR 20
 125: PUSH
 126: LD_INT 7
 128: ST_TO_ADDR
// Freedom := LoadVariable ( Freedom , [ ] ) ;
 129: LD_ADDR_VAR 0 8
 133: PUSH
 134: LD_STRING Freedom
 136: PPUSH
 137: EMPTY
 138: PPUSH
 139: CALL_OW 30
 143: ST_TO_ADDR
// for building in freedom do
 144: LD_ADDR_VAR 0 2
 148: PUSH
 149: LD_VAR 0 8
 153: PUSH
 154: FOR_IN
 155: IFFALSE 398
// begin weap := false ;
 157: LD_ADDR_VAR 0 7
 161: PUSH
 162: LD_INT 0
 164: ST_TO_ADDR
// x := building [ 1 ] ;
 165: LD_ADDR_VAR 0 4
 169: PUSH
 170: LD_VAR 0 2
 174: PUSH
 175: LD_INT 1
 177: ARRAY
 178: ST_TO_ADDR
// y := building [ 2 ] ;
 179: LD_ADDR_VAR 0 5
 183: PUSH
 184: LD_VAR 0 2
 188: PUSH
 189: LD_INT 2
 191: ARRAY
 192: ST_TO_ADDR
// dir := building [ 3 ] ;
 193: LD_ADDR_VAR 0 6
 197: PUSH
 198: LD_VAR 0 2
 202: PUSH
 203: LD_INT 3
 205: ARRAY
 206: ST_TO_ADDR
// bc_type := building [ 4 ] ;
 207: LD_ADDR_OWVAR 42
 211: PUSH
 212: LD_VAR 0 2
 216: PUSH
 217: LD_INT 4
 219: ARRAY
 220: ST_TO_ADDR
// bc_level := building [ 5 ] ;
 221: LD_ADDR_OWVAR 43
 225: PUSH
 226: LD_VAR 0 2
 230: PUSH
 231: LD_INT 5
 233: ARRAY
 234: ST_TO_ADDR
// uc_nation := building [ 6 ] ;
 235: LD_ADDR_OWVAR 21
 239: PUSH
 240: LD_VAR 0 2
 244: PUSH
 245: LD_INT 6
 247: ARRAY
 248: ST_TO_ADDR
// if building > 7 then
 249: LD_VAR 0 2
 253: PUSH
 254: LD_INT 7
 256: GREATER
 257: IFFALSE 287
// begin bc_kind1 := building [ 7 ] ;
 259: LD_ADDR_OWVAR 44
 263: PUSH
 264: LD_VAR 0 2
 268: PUSH
 269: LD_INT 7
 271: ARRAY
 272: ST_TO_ADDR
// bc_kind2 := building [ 8 ] ;
 273: LD_ADDR_OWVAR 45
 277: PUSH
 278: LD_VAR 0 2
 282: PUSH
 283: LD_INT 8
 285: ARRAY
 286: ST_TO_ADDR
// end ; if ( building + 0 ) = 7 then
 287: LD_VAR 0 2
 291: PUSH
 292: LD_INT 0
 294: PLUS
 295: PUSH
 296: LD_INT 7
 298: EQUAL
 299: IFFALSE 315
// weap := building [ 7 ] ;
 301: LD_ADDR_VAR 0 7
 305: PUSH
 306: LD_VAR 0 2
 310: PUSH
 311: LD_INT 7
 313: ARRAY
 314: ST_TO_ADDR
// if bc_type in [ b_oil_mine , b_siberite_mine ] then
 315: LD_OWVAR 42
 319: PUSH
 320: LD_INT 29
 322: PUSH
 323: LD_INT 30
 325: PUSH
 326: EMPTY
 327: LIST
 328: LIST
 329: IN
 330: IFFALSE 351
// SetResourceVisibility ( x , y , you ) ;
 332: LD_VAR 0 4
 336: PPUSH
 337: LD_VAR 0 5
 341: PPUSH
 342: LD_EXP 1
 346: PPUSH
 347: CALL_OW 441
// un := CreateAndPlaceBuildingXYD ( x , y , dir ) ;
 351: LD_ADDR_VAR 0 3
 355: PUSH
 356: LD_VAR 0 4
 360: PPUSH
 361: LD_VAR 0 5
 365: PPUSH
 366: LD_VAR 0 6
 370: PPUSH
 371: CALL_OW 47
 375: ST_TO_ADDR
// if weap then
 376: LD_VAR 0 7
 380: IFFALSE 396
// PlaceWeaponTurret ( un , weap ) ;
 382: LD_VAR 0 3
 386: PPUSH
 387: LD_VAR 0 7
 391: PPUSH
 392: CALL_OW 431
// end ;
 396: GO 154
 398: POP
 399: POP
// building := FilterAllUnits ( [ [ f_side , you ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) ;
 400: LD_ADDR_VAR 0 2
 404: PUSH
 405: LD_INT 22
 407: PUSH
 408: LD_EXP 1
 412: PUSH
 413: EMPTY
 414: LIST
 415: LIST
 416: PUSH
 417: LD_INT 2
 419: PUSH
 420: LD_INT 30
 422: PUSH
 423: LD_INT 0
 425: PUSH
 426: EMPTY
 427: LIST
 428: LIST
 429: PUSH
 430: LD_INT 30
 432: PUSH
 433: LD_INT 1
 435: PUSH
 436: EMPTY
 437: LIST
 438: LIST
 439: PUSH
 440: EMPTY
 441: LIST
 442: LIST
 443: LIST
 444: PUSH
 445: EMPTY
 446: LIST
 447: LIST
 448: PPUSH
 449: CALL_OW 69
 453: ST_TO_ADDR
// for un in building do
 454: LD_ADDR_VAR 0 3
 458: PUSH
 459: LD_VAR 0 2
 463: PUSH
 464: FOR_IN
 465: IFFALSE 529
// begin SetResourceType ( GetBase ( un ) , mat_cans , 125 ) ;
 467: LD_VAR 0 3
 471: PPUSH
 472: CALL_OW 274
 476: PPUSH
 477: LD_INT 1
 479: PPUSH
 480: LD_INT 125
 482: PPUSH
 483: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_oil , 38 ) ;
 487: LD_VAR 0 3
 491: PPUSH
 492: CALL_OW 274
 496: PPUSH
 497: LD_INT 2
 499: PPUSH
 500: LD_INT 38
 502: PPUSH
 503: CALL_OW 277
// SetResourceType ( GetBase ( un ) , mat_siberit , 12 ) ;
 507: LD_VAR 0 3
 511: PPUSH
 512: CALL_OW 274
 516: PPUSH
 517: LD_INT 3
 519: PPUSH
 520: LD_INT 12
 522: PPUSH
 523: CALL_OW 277
// end ;
 527: GO 464
 529: POP
 530: POP
// end ;
 531: LD_VAR 0 1
 535: RET
// function prepare_sides ; begin
 536: LD_INT 0
 538: PPUSH
// you := 7 ;
 539: LD_ADDR_EXP 1
 543: PUSH
 544: LD_INT 7
 546: ST_TO_ADDR
// disable ( 1 ) ;
 547: LD_INT 1
 549: DISABLE_MARKED
// end ;
 550: LD_VAR 0 1
 554: RET
// starting begin prepare_sides ;
 555: CALL 536 0 0
// prepare_freedom ;
 559: CALL 111 0 0
// prepare_units ;
 563: CALL 0 0 0
// add_new_vehicles ;
 567: CALL 1558 0 0
// starting_scene ;
 571: CALL 576 0 0
// end ; end_of_file
 575: END
// var JMM_car , Bur_car ; var JMM_load , Bur_load ; var truck_selected ; export function starting_scene ; begin
 576: LD_INT 0
 578: PPUSH
// interface_hidden := true ;
 579: LD_ADDR_OWVAR 54
 583: PUSH
 584: LD_INT 1
 586: ST_TO_ADDR
// RevealFogArea ( you , all_fog ) ;
 587: LD_EXP 1
 591: PPUSH
 592: LD_INT 2
 594: PPUSH
 595: CALL_OW 332
// ComTurnUnit ( MacMillan , Burlak ) ;
 599: LD_EXP 2
 603: PPUSH
 604: LD_EXP 3
 608: PPUSH
 609: CALL_OW 119
// ComTurnUnit ( Burlak , MacMillan ) ;
 613: LD_EXP 3
 617: PPUSH
 618: LD_EXP 2
 622: PPUSH
 623: CALL_OW 119
// wait ( 10 ) ;
 627: LD_INT 10
 629: PPUSH
 630: CALL_OW 67
// DialogueOn ;
 634: CALL_OW 6
// interface_hidden := true ;
 638: LD_ADDR_OWVAR 54
 642: PUSH
 643: LD_INT 1
 645: ST_TO_ADDR
// Say ( MacMillan , D1-JMM-1 ) ;
 646: LD_EXP 2
 650: PPUSH
 651: LD_STRING D1-JMM-1
 653: PPUSH
 654: CALL_OW 88
// Say ( Burlak , D1-Bur-1 ) ;
 658: LD_EXP 3
 662: PPUSH
 663: LD_STRING D1-Bur-1
 665: PPUSH
 666: CALL_OW 88
// Say ( MacMillan , D1-JMM-2 ) ;
 670: LD_EXP 2
 674: PPUSH
 675: LD_STRING D1-JMM-2
 677: PPUSH
 678: CALL_OW 88
// Say ( Burlak , D1-Bur-2 ) ;
 682: LD_EXP 3
 686: PPUSH
 687: LD_STRING D1-Bur-2
 689: PPUSH
 690: CALL_OW 88
// Say ( MacMillan , D1-JMM-3 ) ;
 694: LD_EXP 2
 698: PPUSH
 699: LD_STRING D1-JMM-3
 701: PPUSH
 702: CALL_OW 88
// Say ( Burlak , D1-Bur-3 ) ;
 706: LD_EXP 3
 710: PPUSH
 711: LD_STRING D1-Bur-3
 713: PPUSH
 714: CALL_OW 88
// Say ( MacMillan , D1-JMM-4 ) ;
 718: LD_EXP 2
 722: PPUSH
 723: LD_STRING D1-JMM-4
 725: PPUSH
 726: CALL_OW 88
// Say ( Burlak , D1-Bur-4 ) ;
 730: LD_EXP 3
 734: PPUSH
 735: LD_STRING D1-Bur-4
 737: PPUSH
 738: CALL_OW 88
// Say ( MacMillan , D1-JMM-5 ) ;
 742: LD_EXP 2
 746: PPUSH
 747: LD_STRING D1-JMM-5
 749: PPUSH
 750: CALL_OW 88
// Say ( Burlak , D1-Bur-5 ) ;
 754: LD_EXP 3
 758: PPUSH
 759: LD_STRING D1-Bur-5
 761: PPUSH
 762: CALL_OW 88
// Say ( MacMillan , D1-JMM-6 ) ;
 766: LD_EXP 2
 770: PPUSH
 771: LD_STRING D1-JMM-6
 773: PPUSH
 774: CALL_OW 88
// Say ( Burlak , D1-Bur-6 ) ;
 778: LD_EXP 3
 782: PPUSH
 783: LD_STRING D1-Bur-6
 785: PPUSH
 786: CALL_OW 88
// Say ( MacMillan , D1-JMM-7 ) ;
 790: LD_EXP 2
 794: PPUSH
 795: LD_STRING D1-JMM-7
 797: PPUSH
 798: CALL_OW 88
// wait ( 20 ) ;
 802: LD_INT 20
 804: PPUSH
 805: CALL_OW 67
// Query ( QTruck ) ;
 809: LD_STRING QTruck
 811: PPUSH
 812: CALL_OW 97
// interface_hidden := false ;
 816: LD_ADDR_OWVAR 54
 820: PUSH
 821: LD_INT 0
 823: ST_TO_ADDR
// DialogueOff ;
 824: CALL_OW 7
// JMM_car := [ ] ;
 828: LD_ADDR_LOC 1
 832: PUSH
 833: EMPTY
 834: ST_TO_ADDR
// Bur_car := [ ] ;
 835: LD_ADDR_LOC 2
 839: PUSH
 840: EMPTY
 841: ST_TO_ADDR
// JMM_load := 0 ;
 842: LD_ADDR_LOC 3
 846: PUSH
 847: LD_INT 0
 849: ST_TO_ADDR
// Bur_load := 0 ;
 850: LD_ADDR_LOC 4
 854: PUSH
 855: LD_INT 0
 857: ST_TO_ADDR
// truck_selected := false ;
 858: LD_ADDR_LOC 5
 862: PUSH
 863: LD_INT 0
 865: ST_TO_ADDR
// ChangeMissionObjectives ( MArtPickup ) ;
 866: LD_STRING MArtPickup
 868: PPUSH
 869: CALL_OW 337
// enable ( 1 ) ;
 873: LD_INT 1
 875: ENABLE_MARKED
// SetAreaMapShow ( leaving_border , 1 ) ;
 876: LD_INT 5
 878: PPUSH
 879: LD_INT 1
 881: PPUSH
 882: CALL_OW 424
// end ;
 886: LD_VAR 0 1
 890: RET
// every 0 0$1 trigger IsInArea ( MacMillan , leaving ) marked 1 do var un , go ;
 891: LD_EXP 2
 895: PPUSH
 896: LD_INT 4
 898: PPUSH
 899: CALL_OW 308
 903: IFFALSE 1167
 905: GO 907
 907: DISABLE
 908: LD_INT 0
 910: PPUSH
 911: PPUSH
// begin go := true ;
 912: LD_ADDR_VAR 0 2
 916: PUSH
 917: LD_INT 1
 919: ST_TO_ADDR
// un := IsInUnit ( MacMillan ) ;
 920: LD_ADDR_VAR 0 1
 924: PUSH
 925: LD_EXP 2
 929: PPUSH
 930: CALL_OW 310
 934: ST_TO_ADDR
// if un and not IsOK ( Burlak ) and not truck_selected and not ( GetWeapon ( un ) in [ us_cargo_bay , ru_cargo_bay ] ) then
 935: LD_VAR 0 1
 939: PUSH
 940: LD_EXP 3
 944: PPUSH
 945: CALL_OW 302
 949: NOT
 950: AND
 951: PUSH
 952: LD_LOC 5
 956: NOT
 957: AND
 958: PUSH
 959: LD_VAR 0 1
 963: PPUSH
 964: CALL_OW 264
 968: PUSH
 969: LD_INT 12
 971: PUSH
 972: LD_INT 51
 974: PUSH
 975: EMPTY
 976: LIST
 977: LIST
 978: IN
 979: NOT
 980: AND
 981: IFFALSE 991
// go := false ;
 983: LD_ADDR_VAR 0 2
 987: PUSH
 988: LD_INT 0
 990: ST_TO_ADDR
// if un and go then
 991: LD_VAR 0 1
 995: PUSH
 996: LD_VAR 0 2
1000: AND
1001: IFFALSE 1137
// begin RemoveUnit ( MacMillan ) ;
1003: LD_EXP 2
1007: PPUSH
1008: CALL_OW 64
// JMM_car := [ GetChassis ( un ) , GetEngine ( un ) , GetControl ( un ) , GetWeapon ( un ) ] ;
1012: LD_ADDR_LOC 1
1016: PUSH
1017: LD_VAR 0 1
1021: PPUSH
1022: CALL_OW 265
1026: PUSH
1027: LD_VAR 0 1
1031: PPUSH
1032: CALL_OW 262
1036: PUSH
1037: LD_VAR 0 1
1041: PPUSH
1042: CALL_OW 263
1046: PUSH
1047: LD_VAR 0 1
1051: PPUSH
1052: CALL_OW 264
1056: PUSH
1057: EMPTY
1058: LIST
1059: LIST
1060: LIST
1061: LIST
1062: ST_TO_ADDR
// if ( GetWeapon ( un ) in [ us_cargo_bay , ru_cargo_bay ] ) then
1063: LD_VAR 0 1
1067: PPUSH
1068: CALL_OW 264
1072: PUSH
1073: LD_INT 12
1075: PUSH
1076: LD_INT 51
1078: PUSH
1079: EMPTY
1080: LIST
1081: LIST
1082: IN
1083: IFFALSE 1126
// begin if ( GetCargoType ( un ) = mat_oil ) then
1085: LD_VAR 0 1
1089: PPUSH
1090: CALL_OW 288
1094: PUSH
1095: LD_INT 2
1097: EQUAL
1098: IFFALSE 1118
// JMM_load := GetCargo ( un , mat_oil ) ;
1100: LD_ADDR_LOC 3
1104: PUSH
1105: LD_VAR 0 1
1109: PPUSH
1110: LD_INT 2
1112: PPUSH
1113: CALL_OW 289
1117: ST_TO_ADDR
// truck_selected := true ;
1118: LD_ADDR_LOC 5
1122: PUSH
1123: LD_INT 1
1125: ST_TO_ADDR
// end ; RemoveUnit ( un ) ;
1126: LD_VAR 0 1
1130: PPUSH
1131: CALL_OW 64
// end else
1135: GO 1166
// begin Query ( QTruck ) ;
1137: LD_STRING QTruck
1139: PPUSH
1140: CALL_OW 97
// repeat wait ( 0 0$1 ) ;
1144: LD_INT 35
1146: PPUSH
1147: CALL_OW 67
// until not IsInArea ( MacMillan , leaving ) ;
1151: LD_EXP 2
1155: PPUSH
1156: LD_INT 4
1158: PPUSH
1159: CALL_OW 308
1163: NOT
1164: IFFALSE 1144
// end ; enable ;
1166: ENABLE
// end ;
1167: PPOPN 2
1169: END
// every 0 0$1 trigger IsInArea ( Burlak , leaving ) marked 1 do var un , go ;
1170: LD_EXP 3
1174: PPUSH
1175: LD_INT 4
1177: PPUSH
1178: CALL_OW 308
1182: IFFALSE 1446
1184: GO 1186
1186: DISABLE
1187: LD_INT 0
1189: PPUSH
1190: PPUSH
// begin go := true ;
1191: LD_ADDR_VAR 0 2
1195: PUSH
1196: LD_INT 1
1198: ST_TO_ADDR
// un := IsInUnit ( Burlak ) ;
1199: LD_ADDR_VAR 0 1
1203: PUSH
1204: LD_EXP 3
1208: PPUSH
1209: CALL_OW 310
1213: ST_TO_ADDR
// if un and not IsOK ( MacMillan ) and not truck_selected and not ( GetWeapon ( un ) in [ us_cargo_bay , ru_cargo_bay ] ) then
1214: LD_VAR 0 1
1218: PUSH
1219: LD_EXP 2
1223: PPUSH
1224: CALL_OW 302
1228: NOT
1229: AND
1230: PUSH
1231: LD_LOC 5
1235: NOT
1236: AND
1237: PUSH
1238: LD_VAR 0 1
1242: PPUSH
1243: CALL_OW 264
1247: PUSH
1248: LD_INT 12
1250: PUSH
1251: LD_INT 51
1253: PUSH
1254: EMPTY
1255: LIST
1256: LIST
1257: IN
1258: NOT
1259: AND
1260: IFFALSE 1270
// go := false ;
1262: LD_ADDR_VAR 0 2
1266: PUSH
1267: LD_INT 0
1269: ST_TO_ADDR
// if un and go then
1270: LD_VAR 0 1
1274: PUSH
1275: LD_VAR 0 2
1279: AND
1280: IFFALSE 1416
// begin RemoveUnit ( Burlak ) ;
1282: LD_EXP 3
1286: PPUSH
1287: CALL_OW 64
// Bur_car := [ GetChassis ( un ) , GetEngine ( un ) , GetControl ( un ) , GetWeapon ( un ) ] ;
1291: LD_ADDR_LOC 2
1295: PUSH
1296: LD_VAR 0 1
1300: PPUSH
1301: CALL_OW 265
1305: PUSH
1306: LD_VAR 0 1
1310: PPUSH
1311: CALL_OW 262
1315: PUSH
1316: LD_VAR 0 1
1320: PPUSH
1321: CALL_OW 263
1325: PUSH
1326: LD_VAR 0 1
1330: PPUSH
1331: CALL_OW 264
1335: PUSH
1336: EMPTY
1337: LIST
1338: LIST
1339: LIST
1340: LIST
1341: ST_TO_ADDR
// if ( GetWeapon ( un ) in [ us_cargo_bay , ru_cargo_bay ] ) then
1342: LD_VAR 0 1
1346: PPUSH
1347: CALL_OW 264
1351: PUSH
1352: LD_INT 12
1354: PUSH
1355: LD_INT 51
1357: PUSH
1358: EMPTY
1359: LIST
1360: LIST
1361: IN
1362: IFFALSE 1405
// begin if ( GetCargoType ( un ) = mat_oil ) then
1364: LD_VAR 0 1
1368: PPUSH
1369: CALL_OW 288
1373: PUSH
1374: LD_INT 2
1376: EQUAL
1377: IFFALSE 1397
// Bur_load := GetCargo ( un , mat_oil ) ;
1379: LD_ADDR_LOC 4
1383: PUSH
1384: LD_VAR 0 1
1388: PPUSH
1389: LD_INT 2
1391: PPUSH
1392: CALL_OW 289
1396: ST_TO_ADDR
// truck_selected := true ;
1397: LD_ADDR_LOC 5
1401: PUSH
1402: LD_INT 1
1404: ST_TO_ADDR
// end ; RemoveUnit ( un ) ;
1405: LD_VAR 0 1
1409: PPUSH
1410: CALL_OW 64
// end else
1414: GO 1445
// begin Query ( QTruck ) ;
1416: LD_STRING QTruck
1418: PPUSH
1419: CALL_OW 97
// repeat wait ( 0 0$1 ) ;
1423: LD_INT 35
1425: PPUSH
1426: CALL_OW 67
// until not IsInArea ( Burlak , leaving ) ;
1430: LD_EXP 3
1434: PPUSH
1435: LD_INT 4
1437: PPUSH
1438: CALL_OW 308
1442: NOT
1443: IFFALSE 1423
// end ; enable ;
1445: ENABLE
// end ;
1446: PPOPN 2
1448: END
// every 0 0$1 trigger not ( IsOK ( MacMillan ) or IsOK ( Burlak ) ) do
1449: LD_EXP 2
1453: PPUSH
1454: CALL_OW 302
1458: PUSH
1459: LD_EXP 3
1463: PPUSH
1464: CALL_OW 302
1468: OR
1469: NOT
1470: IFFALSE 1557
1472: GO 1474
1474: DISABLE
// begin SaveCharacters ( MacMillan , JMM ) ;
1475: LD_EXP 2
1479: PPUSH
1480: LD_STRING JMM
1482: PPUSH
1483: CALL_OW 38
// SaveCharacters ( Burlak , Burlak ) ;
1487: LD_EXP 3
1491: PPUSH
1492: LD_STRING Burlak
1494: PPUSH
1495: CALL_OW 38
// SaveVariable ( JMM_car , JMM_car ) ;
1499: LD_LOC 1
1503: PPUSH
1504: LD_STRING JMM_car
1506: PPUSH
1507: CALL_OW 39
// SaveVariable ( Bur_car , Bur_car ) ;
1511: LD_LOC 2
1515: PPUSH
1516: LD_STRING Bur_car
1518: PPUSH
1519: CALL_OW 39
// SaveVariable ( JMM_load , JMM_car_load ) ;
1523: LD_LOC 3
1527: PPUSH
1528: LD_STRING JMM_car_load
1530: PPUSH
1531: CALL_OW 39
// SaveVariable ( Bur_load , Bur_car_load ) ;
1535: LD_LOC 4
1539: PPUSH
1540: LD_STRING Bur_car_load
1542: PPUSH
1543: CALL_OW 39
// ChangeMap ( %_cont , %_cont ) ;
1547: LD_STRING %_cont
1549: PPUSH
1550: LD_STRING %_cont
1552: PPUSH
1553: CALL_OW 340
// end ; end_of_file
1557: END
// var vehicle_list ; export function add_new_vehicles ; var vehicle , un ; begin
1558: LD_INT 0
1560: PPUSH
1561: PPUSH
1562: PPUSH
// vehicle_list := [ [ us_medium_wheeled , engine_combustion , control_manual , us_double_gun ] , [ ru_medium_wheeled , engine_combustion , control_manual , ru_gun ] , [ us_medium_tracked , engine_siberite , control_manual , us_cargo_bay ] , [ us_medium_tracked , engine_siberite , control_manual , us_gatling_gun ] , [ us_medium_tracked , engine_combustion , control_manual , us_rocket_launcher ] , [ us_heavy_tracked , engine_combustion , control_manual , us_rocket_launcher ] , [ ru_heavy_tracked , engine_siberite , control_manual , ru_bulldozer ] , [ us_heavy_tracked , engine_combustion , control_manual , us_double_gun ] , ] ;
1563: LD_ADDR_LOC 6
1567: PUSH
1568: LD_INT 2
1570: PUSH
1571: LD_INT 1
1573: PUSH
1574: LD_INT 1
1576: PUSH
1577: LD_INT 5
1579: PUSH
1580: EMPTY
1581: LIST
1582: LIST
1583: LIST
1584: LIST
1585: PUSH
1586: LD_INT 21
1588: PUSH
1589: LD_INT 1
1591: PUSH
1592: LD_INT 1
1594: PUSH
1595: LD_INT 44
1597: PUSH
1598: EMPTY
1599: LIST
1600: LIST
1601: LIST
1602: LIST
1603: PUSH
1604: LD_INT 3
1606: PUSH
1607: LD_INT 3
1609: PUSH
1610: LD_INT 1
1612: PUSH
1613: LD_INT 12
1615: PUSH
1616: EMPTY
1617: LIST
1618: LIST
1619: LIST
1620: LIST
1621: PUSH
1622: LD_INT 3
1624: PUSH
1625: LD_INT 3
1627: PUSH
1628: LD_INT 1
1630: PUSH
1631: LD_INT 4
1633: PUSH
1634: EMPTY
1635: LIST
1636: LIST
1637: LIST
1638: LIST
1639: PUSH
1640: LD_INT 3
1642: PUSH
1643: LD_INT 1
1645: PUSH
1646: LD_INT 1
1648: PUSH
1649: LD_INT 7
1651: PUSH
1652: EMPTY
1653: LIST
1654: LIST
1655: LIST
1656: LIST
1657: PUSH
1658: LD_INT 4
1660: PUSH
1661: LD_INT 1
1663: PUSH
1664: LD_INT 1
1666: PUSH
1667: LD_INT 7
1669: PUSH
1670: EMPTY
1671: LIST
1672: LIST
1673: LIST
1674: LIST
1675: PUSH
1676: LD_INT 24
1678: PUSH
1679: LD_INT 3
1681: PUSH
1682: LD_INT 1
1684: PUSH
1685: LD_INT 53
1687: PUSH
1688: EMPTY
1689: LIST
1690: LIST
1691: LIST
1692: LIST
1693: PUSH
1694: LD_INT 4
1696: PUSH
1697: LD_INT 1
1699: PUSH
1700: LD_INT 1
1702: PUSH
1703: LD_INT 5
1705: PUSH
1706: EMPTY
1707: LIST
1708: LIST
1709: LIST
1710: LIST
1711: PUSH
1712: EMPTY
1713: LIST
1714: LIST
1715: LIST
1716: LIST
1717: LIST
1718: LIST
1719: LIST
1720: LIST
1721: ST_TO_ADDR
// uc_side := you ;
1722: LD_ADDR_OWVAR 20
1726: PUSH
1727: LD_EXP 1
1731: ST_TO_ADDR
// for vehicle in vehicle_list do
1732: LD_ADDR_VAR 0 2
1736: PUSH
1737: LD_LOC 6
1741: PUSH
1742: FOR_IN
1743: IFFALSE 1904
// begin if vehicle [ 1 ] in [ ru_medium_wheeled , ru_medium_tracked , ru_heavy_wheeled , ru_heavy_tracked ] then
1745: LD_VAR 0 2
1749: PUSH
1750: LD_INT 1
1752: ARRAY
1753: PUSH
1754: LD_INT 21
1756: PUSH
1757: LD_INT 22
1759: PUSH
1760: LD_INT 23
1762: PUSH
1763: LD_INT 24
1765: PUSH
1766: EMPTY
1767: LIST
1768: LIST
1769: LIST
1770: LIST
1771: IN
1772: IFFALSE 1784
// uc_nation := nation_russian else
1774: LD_ADDR_OWVAR 21
1778: PUSH
1779: LD_INT 3
1781: ST_TO_ADDR
1782: GO 1792
// uc_nation := nation_american ;
1784: LD_ADDR_OWVAR 21
1788: PUSH
1789: LD_INT 1
1791: ST_TO_ADDR
// uc_direction := Rand ( 0 , 5 ) ;
1792: LD_ADDR_OWVAR 24
1796: PUSH
1797: LD_INT 0
1799: PPUSH
1800: LD_INT 5
1802: PPUSH
1803: CALL_OW 12
1807: ST_TO_ADDR
// vc_chassis := vehicle [ 1 ] ;
1808: LD_ADDR_OWVAR 37
1812: PUSH
1813: LD_VAR 0 2
1817: PUSH
1818: LD_INT 1
1820: ARRAY
1821: ST_TO_ADDR
// vc_engine := [ engine_combustion , engine_siberite ] [ Rand ( 1 , 2 ) ] ;
1822: LD_ADDR_OWVAR 39
1826: PUSH
1827: LD_INT 1
1829: PUSH
1830: LD_INT 3
1832: PUSH
1833: EMPTY
1834: LIST
1835: LIST
1836: PUSH
1837: LD_INT 1
1839: PPUSH
1840: LD_INT 2
1842: PPUSH
1843: CALL_OW 12
1847: ARRAY
1848: ST_TO_ADDR
// vc_control := vehicle [ 3 ] ;
1849: LD_ADDR_OWVAR 38
1853: PUSH
1854: LD_VAR 0 2
1858: PUSH
1859: LD_INT 3
1861: ARRAY
1862: ST_TO_ADDR
// vc_weapon := vehicle [ 4 ] ;
1863: LD_ADDR_OWVAR 40
1867: PUSH
1868: LD_VAR 0 2
1872: PUSH
1873: LD_INT 4
1875: ARRAY
1876: ST_TO_ADDR
// un := CreateVehicle ;
1877: LD_ADDR_VAR 0 3
1881: PUSH
1882: CALL_OW 45
1886: ST_TO_ADDR
// PlaceUnitArea ( un , base , false ) ;
1887: LD_VAR 0 3
1891: PPUSH
1892: LD_INT 3
1894: PPUSH
1895: LD_INT 0
1897: PPUSH
1898: CALL_OW 49
// end ;
1902: GO 1742
1904: POP
1905: POP
// end ; end_of_file
1906: LD_VAR 0 1
1910: RET
// on UnitDestroyed ( un ) do begin if un = MacMillan then
1911: LD_VAR 0 1
1915: PUSH
1916: LD_EXP 2
1920: EQUAL
1921: IFFALSE 1930
// Mission_Failed ( 1 ) ;
1923: LD_INT 1
1925: PPUSH
1926: CALL 1952 0 1
// if un = Burlak then
1930: LD_VAR 0 1
1934: PUSH
1935: LD_EXP 3
1939: EQUAL
1940: IFFALSE 1949
// Mission_Failed ( 2 ) end ;
1942: LD_INT 2
1944: PPUSH
1945: CALL 1952 0 1
1949: PPOPN 1
1951: END
// function Mission_Failed ( un ) ; begin
1952: LD_INT 0
1954: PPUSH
// case un of 1 :
1955: LD_VAR 0 1
1959: PUSH
1960: LD_INT 1
1962: DOUBLE
1963: EQUAL
1964: IFTRUE 1968
1966: GO 1978
1968: POP
// YouLost ( JMM ) ; 2 :
1969: LD_STRING JMM
1971: PPUSH
1972: CALL_OW 104
1976: GO 1997
1978: LD_INT 2
1980: DOUBLE
1981: EQUAL
1982: IFTRUE 1986
1984: GO 1996
1986: POP
// YouLost ( Burlak ) ; end ;
1987: LD_STRING Burlak
1989: PPUSH
1990: CALL_OW 104
1994: GO 1997
1996: POP
// end ; end_of_file
1997: LD_VAR 0 2
2001: RET
// every 0 0$2 trigger GetClass ( MacMillan ) <> class_engineer do
2002: LD_EXP 2
2006: PPUSH
2007: CALL_OW 257
2011: PUSH
2012: LD_INT 2
2014: NONEQUAL
2015: IFFALSE 2025
2017: GO 2019
2019: DISABLE
// begin MacMillan_To_Engineer ;
2020: CALL 2026 0 0
// enable ;
2024: ENABLE
// end ;
2025: END
// function MacMillan_To_Engineer ; var depot ; begin
2026: LD_INT 0
2028: PPUSH
2029: PPUSH
// depot := FilterAllUnits ( [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ) ;
2030: LD_ADDR_VAR 0 2
2034: PUSH
2035: LD_INT 2
2037: PUSH
2038: LD_INT 30
2040: PUSH
2041: LD_INT 0
2043: PUSH
2044: EMPTY
2045: LIST
2046: LIST
2047: PUSH
2048: LD_INT 30
2050: PUSH
2051: LD_INT 1
2053: PUSH
2054: EMPTY
2055: LIST
2056: LIST
2057: PUSH
2058: EMPTY
2059: LIST
2060: LIST
2061: LIST
2062: PPUSH
2063: CALL_OW 69
2067: ST_TO_ADDR
// if depot then
2068: LD_VAR 0 2
2072: IFFALSE 2201
// begin depot := depot [ 1 ] ;
2074: LD_ADDR_VAR 0 2
2078: PUSH
2079: LD_VAR 0 2
2083: PUSH
2084: LD_INT 1
2086: ARRAY
2087: ST_TO_ADDR
// InGameOn ;
2088: CALL_OW 8
// if IsInUnit ( MacMillan ) then
2092: LD_EXP 2
2096: PPUSH
2097: CALL_OW 310
2101: IFFALSE 2112
// ComExitBuilding ( MacMillan ) ;
2103: LD_EXP 2
2107: PPUSH
2108: CALL_OW 122
// while GetClass ( MacMillan ) <> class_engineer do
2112: LD_EXP 2
2116: PPUSH
2117: CALL_OW 257
2121: PUSH
2122: LD_INT 2
2124: NONEQUAL
2125: IFFALSE 2197
// begin CenterOnUnits ( MacMillan ) ;
2127: LD_EXP 2
2131: PPUSH
2132: CALL_OW 85
// ComEnterUnit ( MacMillan , depot ) ;
2136: LD_EXP 2
2140: PPUSH
2141: LD_VAR 0 2
2145: PPUSH
2146: CALL_OW 120
// if IsInUnit ( MacMillan ) = depot then
2150: LD_EXP 2
2154: PPUSH
2155: CALL_OW 310
2159: PUSH
2160: LD_VAR 0 2
2164: EQUAL
2165: IFFALSE 2188
// begin ComChangeProfession ( MacMillan , class_engineer ) ;
2167: LD_EXP 2
2171: PPUSH
2172: LD_INT 2
2174: PPUSH
2175: CALL_OW 123
// AddComExitBuilding ( MacMillan ) ;
2179: LD_EXP 2
2183: PPUSH
2184: CALL_OW 182
// end ; wait ( 0 0$1 ) ;
2188: LD_INT 35
2190: PPUSH
2191: CALL_OW 67
// end ;
2195: GO 2112
// InGameOff ;
2197: CALL_OW 9
// end ; enable ;
2201: ENABLE
// end ;
2202: LD_VAR 0 1
2206: RET
// every 0 0$2 trigger GetClass ( Burlak ) <> class_mechanic do var factory ;
2207: LD_EXP 3
2211: PPUSH
2212: CALL_OW 257
2216: PUSH
2217: LD_INT 3
2219: NONEQUAL
2220: IFFALSE 2400
2222: GO 2224
2224: DISABLE
2225: LD_INT 0
2227: PPUSH
// begin factory := FilterAllUnits ( [ f_or , [ f_btype , b_workshop ] , [ f_btype , b_factory ] ] ) ;
2228: LD_ADDR_VAR 0 1
2232: PUSH
2233: LD_INT 2
2235: PUSH
2236: LD_INT 30
2238: PUSH
2239: LD_INT 2
2241: PUSH
2242: EMPTY
2243: LIST
2244: LIST
2245: PUSH
2246: LD_INT 30
2248: PUSH
2249: LD_INT 3
2251: PUSH
2252: EMPTY
2253: LIST
2254: LIST
2255: PUSH
2256: EMPTY
2257: LIST
2258: LIST
2259: LIST
2260: PPUSH
2261: CALL_OW 69
2265: ST_TO_ADDR
// if factory then
2266: LD_VAR 0 1
2270: IFFALSE 2399
// begin factory := factory [ 1 ] ;
2272: LD_ADDR_VAR 0 1
2276: PUSH
2277: LD_VAR 0 1
2281: PUSH
2282: LD_INT 1
2284: ARRAY
2285: ST_TO_ADDR
// InGameOn ;
2286: CALL_OW 8
// if IsInUnit ( Burlak ) then
2290: LD_EXP 3
2294: PPUSH
2295: CALL_OW 310
2299: IFFALSE 2310
// ComExitBuilding ( Burlak ) ;
2301: LD_EXP 3
2305: PPUSH
2306: CALL_OW 122
// while GetClass ( Burlak ) <> class_mechanic do
2310: LD_EXP 3
2314: PPUSH
2315: CALL_OW 257
2319: PUSH
2320: LD_INT 3
2322: NONEQUAL
2323: IFFALSE 2395
// begin CenterOnUnits ( Burlak ) ;
2325: LD_EXP 3
2329: PPUSH
2330: CALL_OW 85
// ComEnterUnit ( Burlak , factory ) ;
2334: LD_EXP 3
2338: PPUSH
2339: LD_VAR 0 1
2343: PPUSH
2344: CALL_OW 120
// if IsInUnit ( Burlak ) = factory then
2348: LD_EXP 3
2352: PPUSH
2353: CALL_OW 310
2357: PUSH
2358: LD_VAR 0 1
2362: EQUAL
2363: IFFALSE 2386
// begin ComChangeProfession ( Burlak , class_mechanic ) ;
2365: LD_EXP 3
2369: PPUSH
2370: LD_INT 3
2372: PPUSH
2373: CALL_OW 123
// AddComExitBuilding ( Burlak ) ;
2377: LD_EXP 3
2381: PPUSH
2382: CALL_OW 182
// end ; wait ( 0 0$1 ) ;
2386: LD_INT 35
2388: PPUSH
2389: CALL_OW 67
// end ;
2393: GO 2310
// InGameOff ;
2395: CALL_OW 9
// end ; enable ;
2399: ENABLE
// end ;
2400: PPOPN 1
2402: END
// every 0 0$2 do var build ;
2403: GO 2405
2405: DISABLE
2406: LD_INT 0
2408: PPUSH
// begin build := FilterAllUnits ( [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ) ;
2409: LD_ADDR_VAR 0 1
2413: PUSH
2414: LD_INT 2
2416: PUSH
2417: LD_INT 30
2419: PUSH
2420: LD_INT 0
2422: PUSH
2423: EMPTY
2424: LIST
2425: LIST
2426: PUSH
2427: LD_INT 30
2429: PUSH
2430: LD_INT 1
2432: PUSH
2433: EMPTY
2434: LIST
2435: LIST
2436: PUSH
2437: EMPTY
2438: LIST
2439: LIST
2440: LIST
2441: PPUSH
2442: CALL_OW 69
2446: ST_TO_ADDR
// if build then
2447: LD_VAR 0 1
2451: IFFALSE 2581
// begin build := build [ 1 ] ;
2453: LD_ADDR_VAR 0 1
2457: PUSH
2458: LD_VAR 0 1
2462: PUSH
2463: LD_INT 1
2465: ARRAY
2466: ST_TO_ADDR
// if GetLives ( build ) < 800 then
2467: LD_VAR 0 1
2471: PPUSH
2472: CALL_OW 256
2476: PUSH
2477: LD_INT 800
2479: LESS
2480: IFFALSE 2581
// begin ComExitVehicle ( [ Burlak , MacMillan ] ) ;
2482: LD_EXP 3
2486: PUSH
2487: LD_EXP 2
2491: PUSH
2492: EMPTY
2493: LIST
2494: LIST
2495: PPUSH
2496: CALL_OW 121
// interface_hidden := true ;
2500: LD_ADDR_OWVAR 54
2504: PUSH
2505: LD_INT 1
2507: ST_TO_ADDR
// if GetClass ( MacMillan ) <> class_engineer then
2508: LD_EXP 2
2512: PPUSH
2513: CALL_OW 257
2517: PUSH
2518: LD_INT 2
2520: NONEQUAL
2521: IFFALSE 2527
// MacMillan_To_Engineer ;
2523: CALL 2026 0 0
// InGameOn ;
2527: CALL_OW 8
// while GetLives ( build ) < 1000 do
2531: LD_VAR 0 1
2535: PPUSH
2536: CALL_OW 256
2540: PUSH
2541: LD_INT 1000
2543: LESS
2544: IFFALSE 2569
// begin ComRepairBuilding ( MacMillan , build ) ;
2546: LD_EXP 2
2550: PPUSH
2551: LD_VAR 0 1
2555: PPUSH
2556: CALL_OW 130
// wait ( 0 0$1 ) ;
2560: LD_INT 35
2562: PPUSH
2563: CALL_OW 67
// end ;
2567: GO 2531
// InGameOff ;
2569: CALL_OW 9
// interface_hidden := false ;
2573: LD_ADDR_OWVAR 54
2577: PUSH
2578: LD_INT 0
2580: ST_TO_ADDR
// end ; end ; build := FilterAllUnits ( [ f_or , [ f_btype , b_workshop ] , [ f_btype , b_factory ] ] ) ;
2581: LD_ADDR_VAR 0 1
2585: PUSH
2586: LD_INT 2
2588: PUSH
2589: LD_INT 30
2591: PUSH
2592: LD_INT 2
2594: PUSH
2595: EMPTY
2596: LIST
2597: LIST
2598: PUSH
2599: LD_INT 30
2601: PUSH
2602: LD_INT 3
2604: PUSH
2605: EMPTY
2606: LIST
2607: LIST
2608: PUSH
2609: EMPTY
2610: LIST
2611: LIST
2612: LIST
2613: PPUSH
2614: CALL_OW 69
2618: ST_TO_ADDR
// if build then
2619: LD_VAR 0 1
2623: IFFALSE 2753
// begin build := build [ 1 ] ;
2625: LD_ADDR_VAR 0 1
2629: PUSH
2630: LD_VAR 0 1
2634: PUSH
2635: LD_INT 1
2637: ARRAY
2638: ST_TO_ADDR
// if GetLives ( build ) < 800 then
2639: LD_VAR 0 1
2643: PPUSH
2644: CALL_OW 256
2648: PUSH
2649: LD_INT 800
2651: LESS
2652: IFFALSE 2753
// begin ComExitVehicle ( [ Burlak , MacMillan ] ) ;
2654: LD_EXP 3
2658: PUSH
2659: LD_EXP 2
2663: PUSH
2664: EMPTY
2665: LIST
2666: LIST
2667: PPUSH
2668: CALL_OW 121
// interface_hidden := true ;
2672: LD_ADDR_OWVAR 54
2676: PUSH
2677: LD_INT 1
2679: ST_TO_ADDR
// if GetClass ( MacMillan ) <> class_engineer then
2680: LD_EXP 2
2684: PPUSH
2685: CALL_OW 257
2689: PUSH
2690: LD_INT 2
2692: NONEQUAL
2693: IFFALSE 2699
// MacMillan_To_Engineer ;
2695: CALL 2026 0 0
// InGameOn ;
2699: CALL_OW 8
// while GetLives ( build ) < 1000 do
2703: LD_VAR 0 1
2707: PPUSH
2708: CALL_OW 256
2712: PUSH
2713: LD_INT 1000
2715: LESS
2716: IFFALSE 2741
// begin ComRepairBuilding ( MacMillan , build ) ;
2718: LD_EXP 2
2722: PPUSH
2723: LD_VAR 0 1
2727: PPUSH
2728: CALL_OW 130
// wait ( 0 0$1 ) ;
2732: LD_INT 35
2734: PPUSH
2735: CALL_OW 67
// end ;
2739: GO 2703
// InGameOff ;
2741: CALL_OW 9
// interface_hidden := false ;
2745: LD_ADDR_OWVAR 54
2749: PUSH
2750: LD_INT 0
2752: ST_TO_ADDR
// end ; end ; enable ;
2753: ENABLE
// end ;
2754: PPOPN 1
2756: END
